package org.zwy.gradetrack.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.zwy.gradetrack.entity.RolePermission;

import java.util.List;
import java.util.Map;

/**
 * 角色权限关联服务接口
 */
public interface RolePermissionService extends IService<RolePermission> {
    
    /**
     * 为角色分配权限
     *
     * @param roleId 角色ID
     * @param permissionIds 权限ID列表
     * @return 是否成功
     */
    boolean assignPermissions(Long roleId, List<Long> permissionIds);
    
    /**
     * 获取角色的权限ID列表
     *
     * @param roleId 角色ID
     * @return 权限ID列表
     */
    List<Long> getPermissionIdsByRoleId(Long roleId);
    
    /**
     * 获取角色的权限列表
     *
     * @param roleId 角色ID
     * @return 权限列表
     */
    List<RolePermission> getPermissionsByRoleId(Long roleId);
    
    /**
     * 检查角色是否拥有指定权限
     *
     * @param roleId 角色ID
     * @param permissionId 权限ID
     * @return 是否拥有权限
     */
    boolean hasPermission(Long roleId, Long permissionId);
    
    /**
     * 移除角色的所有权限
     *
     * @param roleId 角色ID
     * @return 是否成功
     */
    boolean removeAllPermissions(Long roleId);
    
    /**
     * 批量保存角色权限关联
     *
     * @param rolePermissions 角色权限关联列表
     * @return 是否成功
     */
    boolean saveBatch(List<RolePermission> rolePermissions);
    
    /**
     * 批量获取多个角色的权限ID列表
     *
     * @param roleIds 角色ID列表
     * @return 角色ID到权限ID列表的映射
     */
    Map<Long, List<Long>> getPermissionIdsByRoleIds(List<Long> roleIds);
    
    /**
     * 批量检查角色是否拥有指定权限
     *
     * @param roleIds 角色ID列表
     * @param permissionId 权限ID
     * @return 角色ID到是否拥有权限的映射
     */
    Map<Long, Boolean> hasPermissions(List<Long> roleIds, Long permissionId);
    
    /**
     * 批量移除多个角色的所有权限
     *
     * @param roleIds 角色ID列表
     * @return 是否成功
     */
    boolean removeAllPermissionsBatch(List<Long> roleIds);
    
    /**
     * 获取拥有指定权限的角色ID列表
     *
     * @param permissionId 权限ID
     * @return 角色ID列表
     */
    List<Long> getRoleIdsByPermissionId(Long permissionId);
    
    /**
     * 批量获取拥有指定权限的角色ID列表
     *
     * @param permissionIds 权限ID列表
     * @return 权限ID到角色ID列表的映射
     */
    Map<Long, List<Long>> getRoleIdsByPermissionIds(List<Long> permissionIds);
} 